home *** CD-ROM | disk | FTP | other *** search
- #include "myIncludes.h"
- #include "myProtos.h"
-
-
- AEDesc *gMembers[20];
- long gTix[20];
- long gmyTix[20];
- short gMidiPart[256];
- long gNumTrebNotes;
- long gNumBassNotes;
-
-
- void zero_mem(char *ptr, long len);
- void zero_mem(char *ptr, long len)
- {
- if (len > 0)
- while (len--)
- *ptr++ = 0;
- }
-
-
- void copy_mem( void *ptr1, void *ptr2, long len)
- {
- register char *p1=ptr1, *p2=ptr2;
-
- if (len > 0)
- while (len--)
- *p2++ = *p1++;
- }
-
-
- pascal Boolean filterProc(EventRecord *eventIn, long sleep, long transID, AEAddressDesc *adddr);
- pascal Boolean filterProc(EventRecord *eventIn, long sleep, long transID, AEAddressDesc *adddr)
- {
- return(true);
- }
-
-
- OSErr get_self(long *numNeeded)
- {
- OSErr err;
- AEDesc *myAddrDescP;
- AppleEvent theEvent, reply;
- long myTix, theirTix;
- Size actualSize;
- DescType actualType;
- ProcessSerialNumber mypsn;
-
- if (err = GetCurrentProcess(&mypsn))
- return(err);
-
- myAddrDescP = (AEDesc *)NewPtrClear(sizeof(AEDesc)); /* this stays around for sending */
- if ( (err = MemError()) || (myAddrDescP == NULL) )
- return(err?err:-2);
-
- err = AECreateDesc(typeProcessSerialNumber, (Ptr)&mypsn, sizeof(ProcessSerialNumber), myAddrDescP);
- if (err == noErr)
- err = AECreateAppleEvent(kChoirEventClass, STEP1, myAddrDescP,
- kAutoGenerateReturnID, kAnyTransactionID, &theEvent);
-
- if (err == noErr)
- err = AESend(&theEvent, &reply, kAEWaitReply + kAECanInteract + kAECanSwitchLayer,
- kAEHighPriority, 60*2, NULL, filterProc);
- if (err == noErr)
- err = AESend(&theEvent, &reply, kAEWaitReply + kAECanInteract + kAECanSwitchLayer,
- kAEHighPriority, 60*2, NULL, filterProc);
- if (err == noErr)
- {
- err = AEGetParamPtr(&reply, TICKS_PARAM, typeLongInteger, &actualType,
- (Ptr)&theirTix, sizeof(theirTix), &actualSize);
- if (err == noErr)
- { /* add to list of choir members */
- gMembers[0] = myAddrDescP;
- gTix[0] = /*myTix -*/ theirTix;
- gmyTix[0] = TickCount();
- }
- else
- SysBeep(0);
- }
-
- if (err)
- *numNeeded = 0;
- else
- *numNeeded = 1;
- return(err);
- }
-
-
- OSErr get_members(long *numNeeded)
- {
- OSErr err;
- ATNBPRecHandle nbph;
- EntityName entity;
- AddrBlock addr;
- short i;
- AEDesc *myAddrDescP;
- AppleEvent theEvent, reply;
- TargetID targ;
- PortInfoRec port;
- IPCListPortsPBRec ipclist;
- long myTix, theirTix, numFound;
- Size actualSize;
- DescType actualType;
- ProcessSerialNumber mypsn;
-
- numFound = 0;
-
- if (err = GetCurrentProcess(&mypsn))
- return(err);
-
- myAddrDescP = (AEDesc *)NewPtrClear(sizeof(AEDesc)); /* this stays around for sending */
- if ( (err = MemError()) || (myAddrDescP == NULL) )
- return(err?err:-2);
-
- err = AECreateDesc(typeProcessSerialNumber, (Ptr)&mypsn, sizeof(ProcessSerialNumber), myAddrDescP);
- if (err == noErr)
- err = AECreateAppleEvent(kChoirEventClass, STEP1, myAddrDescP,
- kAutoGenerateReturnID, kAnyTransactionID, &theEvent);
-
- if (err == noErr)
- err = AESend(&theEvent, &reply, kAEWaitReply + kAECanInteract + kAECanSwitchLayer,
- kAEHighPriority, 60*2, NULL, filterProc);
- if (err == noErr)
- err = AESend(&theEvent, &reply, kAEWaitReply + kAECanInteract + kAECanSwitchLayer,
- kAEHighPriority, 60*2, NULL, filterProc);
- if (err == noErr)
- {
- err = AEGetParamPtr(&reply, TICKS_PARAM, typeLongInteger, &actualType,
- (Ptr)&theirTix, sizeof(theirTix), &actualSize);
- if (err == noErr)
- { /* add to list of choir members */
- gMembers[numFound] = myAddrDescP;
- gTix[numFound] = /*myTix -*/ theirTix;
- gmyTix[numFound] = TickCount();
- numFound++;
- }
- }
-
- if (*numNeeded <= 0)
- return(-1);
-
- if ( err = MPPOpen())
- return(err);
-
- nbph = (ATNBPRecHandle)NewHandleClear(sizeof(ATNBPRec));
- if ( (err = MemError()) || nbph == NULL )
- return(err?err:-1);
-
- entity.objStr[ 0 ] = 1;
- entity.objStr[ 1 ] = '=';
- copy_mem( "\pPPCToolBox", entity.typeStr, 11 );
- entity.zoneStr[ 0 ] = 1;
- entity.zoneStr[ 1 ] = '*';
-
- HLock( nbph );
- (**nbph).nbpEntityPtr = &entity;
- (**nbph).nbpDataField = 5 * *numNeeded;
- (**nbph).nbpBufSize = 5 * (*numNeeded * ( 33 + sizeof( AddrBlock ) + 4 ));
- (**nbph).nbpBufPtr = NewPtr((**nbph).nbpBufSize);
- if ( (err = MemError()) || (**nbph).nbpBufPtr == NULL )
- {
- DisposHandle(nbph);
- return(err?err:-1);
- }
-
- (**nbph).nbpRetransmitInfo.retransInterval = 2;
- (**nbph).nbpRetransmitInfo.retransCount = 3;
- HUnlock( nbph );
- if ( err = NBPLookup( nbph, FALSE ))
- {
- DisposPtr( (**nbph).nbpBufPtr );
- DisposHandle( nbph );
- return(err);
- }
-
- HLock(nbph);
- for ( i = 1; i <= (**nbph).nbpDataField; ++i )
- {
- if ( err = NBPExtract((**nbph).nbpBufPtr, (**nbph).nbpDataField, i, &entity, &addr) )
- {
- DisposPtr( (**nbph).nbpBufPtr );
- DisposHandle( nbph );
- return( err );
- }
-
- /* ON REMOTE MAC: LAUNCH APPLICATION */
-
- targ.name.nameScript = smRoman;
- copy_mem( "\pchorus", targ.name.name, 7 );
-
- targ.name.portKindSelector = ppcByString;
- targ.name.u.portTypeStr[0] = 1;
- targ.name.u.portTypeStr[1] = '=';
- targ.location.locationKindSelector = ppcNBPLocation;
- targ.location.u.nbpEntity = entity;
-
-
- zero_mem( (char *)&ipclist, sizeof( ipclist ));
- ipclist.startIndex = 0;
- ipclist.requestCount = 1;
- ipclist.portName = &targ.name;
- ipclist.locationName = &targ.location;
- ipclist.bufferPtr = &port;
- if (( err = IPCListPorts(&ipclist, FALSE)) )
- return(err ? err : -1);
-
- if (ipclist.actualCount > 0)
- {
- targ.name = port.name;
-
- myAddrDescP = (AEDesc *)NewPtrClear(sizeof(AEDesc)); /* this stays around for sending */
- if ( (err = MemError()) || (myAddrDescP == NULL) )
- return(err?err:-2);
-
- err = AECreateDesc(typeTargetID, (Ptr)&targ, sizeof(targ), myAddrDescP);
- if (err == noErr)
- err = AECreateAppleEvent(kChoirEventClass, STEP1, myAddrDescP,
- kAutoGenerateReturnID, kAnyTransactionID, &theEvent);
-
- if (err == noErr)
- err = AESend(&theEvent, &reply, kAEWaitReply + kAECanInteract + kAECanSwitchLayer,
- kAEHighPriority, 60*20, NULL, NULL);
- if (err == noErr)
- err = AESend(&theEvent, &reply, kAEWaitReply + kAECanInteract + kAECanSwitchLayer,
- kAEHighPriority, 60*20, NULL, NULL);
- if (err == noErr)
- {
- err = AEGetParamPtr(&reply, TICKS_PARAM, typeLongInteger, &actualType,
- (Ptr)&theirTix, sizeof(theirTix), &actualSize);
- if (err == noErr)
- { /* add to list of choir members */
- gMembers[numFound] = myAddrDescP;
- gTix[numFound] = /*myTix -*/ theirTix;
- gmyTix[numFound] = TickCount();
- numFound++;
- }
- else
- SysBeep(0);
-
- err = AEDisposeDesc(&theEvent);
- }
- }
-
- }
-
- *numNeeded = numFound;
- return(numFound <= 0);
- }
-